/**
 * Copyright (C) 2011 GreenSoft S.A.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *        http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package ar.com.greensoft.neosystem.model.references;

/**
 * <p>
 * Los códigos ISO 3166-2 para Argentina abarcan las 23 provincias y 
 * 1 distrito federal. La primera parte es el código AR ISO 3166-1 para Argentina, 
 * la segunda parte es alfabética, de un carácter que representa la provincia o 
 * la Capital Federal. 
 * </p>
 * <p>
 * Esta letra se utilizó hasta 1994 para identificar las chapas patentes 
 * (o matrículas) de los vehículos. éstas consistían en la letra identificatoria 
 * seguida de un número, habitualmente de seis o siete dígitos. Dado que las letras 
 * I y O son fáciles de confundir con los números 1 y 0, fueron excluidas de las 
 * patentes.
 * </p>
 * @author Jorge E. Villaverde
 * @version 1.0.0
 * @date 21/06/2011  
 */
public enum ISO3166_2AR implements LabeledEnum{
	AR_A, // 	Salta
	AR_B, // 	Provincia de Buenos Aires
	AR_C, // 	Capital Federal
	AR_D, // 	San Luis
	AR_E, // 	Entre Ríos
	AR_F, // 	La Rioja
	AR_G, // 	Santiago del Estero
	AR_H, // 	Chaco
	AR_J, // 	San Juan
	AR_K, // 	Catamarca
	AR_L, // 	La Pampa
	AR_M, // 	Mendoza
	AR_N, // 	Misiones
	AR_P, // 	Formosa
	AR_Q, // 	Neuquén
	AR_R, // 	Río Negro
	AR_S, // 	Santa Fe
	AR_T, // 	Tucumán
	AR_U, // 	Chubut
	AR_V, // 	Tierra del Fuego
	AR_W, // 	Corrientes
	AR_X, // 	Córdoba
	AR_Y, // 	Jujuy
	AR_Z; // 	Santa Cruz
	
	public static final String AR_A_NOMBRE = "Salta";
	public static final String AR_B_NOMBRE = "Provincia de Buenos Aires";
	public static final String AR_C_NOMBRE = "Capital Federal";
	public static final String AR_D_NOMBRE = "San Luis";
	public static final String AR_E_NOMBRE = "Entre Ríos";
	public static final String AR_F_NOMBRE = "La Rioja";
	public static final String AR_G_NOMBRE = "Santiago del Estero";
	public static final String AR_H_NOMBRE = "Chaco";
	public static final String AR_J_NOMBRE = "San Juan";
	public static final String AR_K_NOMBRE = "Catamarca";
	public static final String AR_L_NOMBRE = "La Pampa";
	public static final String AR_M_NOMBRE = "Mendoza";
	public static final String AR_N_NOMBRE = "Misiones";
	public static final String AR_P_NOMBRE = "Formosa";
	public static final String AR_Q_NOMBRE = "Neuquén";
	public static final String AR_R_NOMBRE = "Río Negro";
	public static final String AR_S_NOMBRE = "Santa Fe";
	public static final String AR_T_NOMBRE = "Tucumán";
	public static final String AR_U_NOMBRE = "Chubut";
	public static final String AR_V_NOMBRE = "Tierra del Fuego";
	public static final String AR_W_NOMBRE = "Corrientes";
	public static final String AR_X_NOMBRE = "Córdoba";
	public static final String AR_Y_NOMBRE = "Jujuy";
	public static final String AR_Z_NOMBRE = "Santa Cruz";
		
	public static ISO3166_2AR fromCode(char code){
		switch (code) {
		case 'A':
			return AR_A;
		case 'B':
			return AR_B;
		case 'C':
			return AR_C;
		case 'D':
			return AR_D;
		case 'E':
			return AR_E;
		case 'F':
			return AR_F;
		case 'G':
			return AR_G;
		case 'H':
			return AR_H;
		case 'J':
			return AR_J;
		case 'K':
			return AR_K;
		case 'L':
			return AR_L;
		case 'M':
			return AR_M;
		case 'N':
			return AR_N;
		case 'P':
			return AR_P;
		case 'Q':
			return AR_Q;
		case 'R':
			return AR_R;
		case 'S':
			return AR_S;
		case 'T':
			return AR_T;
		case 'U':
			return AR_U;
		case 'V':
			return AR_V;
		case 'W':
			return AR_W;
		case 'X':
			return AR_X;
		case 'Y':
			return AR_Y;
		case 'Z':
			return AR_Z;
		default:
			break;
		}
		return null;
	}
	
	public static ISO3166_2AR fromLabel(String label){
		if(AR_A_NOMBRE.equalsIgnoreCase(label))
			return AR_A;
		if(AR_B_NOMBRE.equalsIgnoreCase(label))
			return AR_B;
		if(AR_C_NOMBRE.equalsIgnoreCase(label))
			return AR_C;
		if(AR_D_NOMBRE.equalsIgnoreCase(label))
			return AR_D;
		if(AR_E_NOMBRE.equalsIgnoreCase(label))
			return AR_E;
		if(AR_F_NOMBRE.equalsIgnoreCase(label))
			return AR_F;
		if(AR_G_NOMBRE.equalsIgnoreCase(label))
			return AR_G;
		if(AR_H_NOMBRE.equalsIgnoreCase(label))
			return AR_H;
		if(AR_J_NOMBRE.equalsIgnoreCase(label))
			return AR_J;
		if(AR_K_NOMBRE.equalsIgnoreCase(label))
			return AR_K;
		if(AR_L_NOMBRE.equalsIgnoreCase(label))
			return AR_L;
		if(AR_M_NOMBRE.equalsIgnoreCase(label))
			return AR_M;
		if(AR_N_NOMBRE.equalsIgnoreCase(label))
			return AR_N;
		if(AR_P_NOMBRE.equalsIgnoreCase(label))
			return AR_P;
		if(AR_Q_NOMBRE.equalsIgnoreCase(label))
			return AR_Q;
		if(AR_R_NOMBRE.equalsIgnoreCase(label))
			return AR_R;
		if(AR_S_NOMBRE.equalsIgnoreCase(label))
			return AR_S;
		if(AR_T_NOMBRE.equalsIgnoreCase(label))
			return AR_T;
		if(AR_U_NOMBRE.equalsIgnoreCase(label))
			return AR_U;
		if(AR_V_NOMBRE.equalsIgnoreCase(label))
			return AR_V;
		if(AR_W_NOMBRE.equalsIgnoreCase(label))
			return AR_W;
		if(AR_X_NOMBRE.equalsIgnoreCase(label))
			return AR_X;
		if(AR_Y_NOMBRE.equalsIgnoreCase(label))
			return AR_Y;
		if(AR_Z_NOMBRE.equalsIgnoreCase(label))
			return AR_Z;
		return null;
	}
	
	public String toString(){
		if(AR_A.equals(this))
			return AR_A_NOMBRE;
		if(AR_B.equals(this))
			return AR_B_NOMBRE;
		if(AR_C.equals(this))
			return AR_C_NOMBRE;
		if(AR_D.equals(this))
			return AR_D_NOMBRE;
		if(AR_E.equals(this))
			return AR_E_NOMBRE;
		if(AR_F.equals(this))
			return AR_F_NOMBRE;
		if(AR_G.equals(this))
			return AR_G_NOMBRE;
		if(AR_H.equals(this))
			return AR_H_NOMBRE;
		if(AR_J.equals(this))
			return AR_J_NOMBRE;
		if(AR_K.equals(this))
			return AR_K_NOMBRE;
		if(AR_L.equals(this))
			return AR_L_NOMBRE;
		if(AR_M.equals(this))
			return AR_M_NOMBRE;
		if(AR_N.equals(this))
			return AR_N_NOMBRE;
		if(AR_P.equals(this))
			return AR_P_NOMBRE;
		if(AR_Q.equals(this))
			return AR_Q_NOMBRE;
		if(AR_R.equals(this))
			return AR_R_NOMBRE;
		if(AR_S.equals(this))
			return AR_S_NOMBRE;
		if(AR_T.equals(this))
			return AR_T_NOMBRE;
		if(AR_U.equals(this))
			return AR_U_NOMBRE;
		if(AR_V.equals(this))
			return AR_V_NOMBRE;
		if(AR_W.equals(this))
			return AR_W_NOMBRE;
		if(AR_X.equals(this))
			return AR_X_NOMBRE;
		if(AR_Y.equals(this))
			return AR_Y_NOMBRE;
		if(AR_Z.equals(this))
			return AR_Z_NOMBRE;
		return "";
	}

	@Override
	public String getLabel() {
		return toString();
	}
}